package com.epoint.java8;

import com.epoint.java8.domain.Person;
import org.junit.Test;

import java.util.Optional;

/**
 * 处理解决 空指针异常的
 *
 * Optional可以看成一个容器，他包装了 我们真实的数据。
 */
public class OptionalDemo {

    @Test
    public void test1(){
        Person person = new Person();
        // of 创建Optional，前提，参数必须是非null，非则报错
        Optional<Person> personOp = Optional.of(person);

        // ofNullable 创建Optional，前提，参数必须是非null，非则报错
        Person person2 = null;
        // ofNullable 创建Optional，参数可以是null
        Optional<Person> personOp2 = Optional.ofNullable(person2);

        /**
         * 如何解决空指针异常？
         * Optional.orElse 参数是一个备胎数据，如果Optional包装的数据真的为null，则使用备胎
         */
        System.out.println(personOp2.orElse(new Person()));

        // orElseGet 和 orElse的区别，后者是直接把备胎准备好给你，前者是 需要自己准备备胎，都一个意思
        System.out.println(personOp2.orElseGet(Person::new));

    }


}
